//#include <iostream>
//using namespace std;
//
//const int N = 1e6 + 10;
//int el[N], ne[N];
//int n, h;
//
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> ne[i];
//		el[i] = i;
//	}
//	cin >> h;
//	
//	for (int i = h; i; i = ne[i])
//	{
//		cout << el[i] << " ";
//	}
//	
//	return 0;
// } 



//#include <iostream>
//using namespace std;
//
//const int N = 1e5 + 10, M = 1e6 + 10;
//int h, id, e[N], ne[N], mp[M];
//
//int main()
//{
//	int n; cin >> n;
//	
//	id++;
//	e[id] = 1;
//	mp[1] = id;
//	
//	while (n--)
//	{
//		int op, x, y;
//		cin >> op >> x;
//		int p = mp[x];
//		
//		if (op == 1)
//		{
//			cin >> y;
//			
//			id++;
//			e[id] = y;
//			ne[id] = ne[p];
//			ne[p] = id;
//			
//			mp[y] = id;
//		}
//		else if (op == 2)
//		{
//			cout << e[ne[p]] << endl;
//		}
//		else
//		{
//			ne[p] = ne[ne[p]];
//		}
//	}
//	
//	return 0;
//}



#include <iostream>
using namespace std;

const int N = 1e5 + 10;
int h, id, e[N], ne[N], pre[N], mp[N];
bool st[N];

int main()
{
	id++;
	e[id] = 1;
	pre[id] = h;
	mp[1] = id;
	
	int n; cin >> n;
	for (int i = 2; i <= n; i++)
	{
		int k, op; cin >> k >> op;
		
		int p = mp[k];
		if (op == 0)
		{
			id++;
			e[id] = i;
			ne[id] = p;
			pre[id] = pre[p];
			
			ne[pre[p]] = id;
			pre[p] = id;
			
			mp[i] = id;
		}
		else
		{
			id++;
			e[id] = i;
			ne[id] = ne[p];
			pre[id] = p;
			
			pre[ne[p]] = id;
			ne[p] = id;
			
			mp[i] =id;
		}
	}
	int m; cin>> m;
	
	while (m--)
	{
		int x; cin >> x;
		
		if (st[x] == true) continue;
		int p = mp[x];
		ne[pre[p]] = ne[p];
		pre[ne[p]] = pre[p];
		st[x] = true;
	}
	
	for (int i = ne[h]; i; i = ne[i])
	{
		cout << e[i] << " ";
	}
	
	return 0;
 } 



//#include <iostream>
//using namespace std;
//
//const int N = 1e5 + 10;
//int h, ne[N], pre[N];
//bool st[N];
//
//int main()
//{
//	ne[h] = 1; pre[1] = h;
//	int n; cin >> n;
//	for (int i = 2; i <= n; i++)
//	{
//		int k, p; cin >> k >> p;
//		if (p == 0)
//		{
//			ne[i] = k;
//			pre[i] = pre[k];
//			
//			ne[pre[k]] = i;
//			pre[k] = i;
//		}
//		else
//		{
//			pre[i] = k;
//			ne[i] = ne[k];
//			
//			pre[ne[k]] = i;
//			ne[k] = i;
//		}
//	}
//	
//	int m; cin >> m;
//	while (m--)
//	{
//		int x; cin >> x;
//		if (st[x]== true) continue;
//		
//		ne[pre[x]] = ne[x];
//		pre[ne[x]] = pre[x];
//		st[x] = true;
//	}
//	
//	for (int i = ne[h]; i; i = ne[i])
//	{
//		cout << i << " ";
//	}
//	
//	return 0;
//}
